package 系统资源类

import (
	"gitee.com/go_888/internal-call/gopsutil/mem"
	"log"
)

// X取内存信息 获取系统的内存使用情况
// 精简掉返回为空的字段, 更多信息见 mem.VirtualMemory()
func X取内存信息() X内存信息 {
	// m1存储了获取到的虚拟内存信息，忽略错误处理
	m1, err := mem.VirtualMemory()
	if err != nil {
		log.Printf("取内存信息失败：%v", err)
	}
	// 返回一个X内存信息结构体，其中包含了内存的主要使用情况
	return X内存信息{
		X内存容量:  m1.Total,       // 总内存容量
		X可用大小:  m1.Available,   // 当前可用的内存大小
		X已用大小:  m1.Used,        // 当前已用的内存大小
		X已用百分比: m1.UsedPercent, // 内存使用占比
	}
}

// X取虚拟内存信息 返回系统中所有虚拟内存设备的信息
func X取虚拟内存信息() []X虚拟内存信息 {
	// 初始化一个空的X虚拟内存信息切片，用于存储所有虚拟内存设备的信息
	返回 := []X虚拟内存信息{}

	// 使用mem.SwapDevices()函数获取系统中的所有虚拟内存设备，忽略错误信息
	devices, err := mem.SwapDevices()
	if err != nil {
		log.Printf("取虚拟内存信息失败：%v", err)
	}
	// 遍历每个虚拟内存设备
	for _, device := range devices {
		// 将当前虚拟内存设备的信息创建为一个X虚拟内存信息结构体，并追加到返回切片中
		信息 := X虚拟内存信息{
			X虚拟内存名称: device.Name,
			X已用大小:   device.UsedBytes,
			X可用大小:   device.FreeBytes,
		}
		返回 = append(返回, 信息)
	}

	// 返回存储了所有虚拟内存设备信息的切片
	return 返回
}

type X虚拟内存信息 struct {
	X虚拟内存名称 string `json:"name"`
	X已用大小   uint64 `json:"usedBytes"` //字节
	X可用大小   uint64 `json:"freeBytes"` //字节
}

type X内存信息 struct {
	X内存容量  uint64  `json:"total"`     //字节
	X可用大小  uint64  `json:"available"` //字节
	X已用大小  uint64  `json:"used"`      //字节
	X已用百分比 float64 `json:"usedPercent"`
}
